// 导入 token 的文件
import router from '../../router'
import {
  getToken,
  setToken,
  delToken,
  // 登录时保存的时间戳
  setTimeStamp,
  // 清除登录时的时间戳
  removeTimeStamp
} from '@/utils/auth'

// 导入网络请求,登录接口获得 token 的接口
import {
  loginApi,
  getInfoApi
} from '@/api/user'

// 导入接口获得员工头像
import {
  getBaseInfoApi
} from '@/api/employee'

// 保存 token
const state = {
  token: getToken(),
  // 用户信息
  userInfo: ''
}

const mutations = {
  SET_TOKEN(state, payload) {
    // 将 token 保存在内存中,但是刷新后就没了
    state.token = payload
    // 把 token 保存在 cokies 中,这样刷新之后 token 也在
    setToken(payload)
    // 登录的时候顺便也把时间戳保存进去
    setTimeStamp()
  },

  // 清除 token
  REMOVE_TOKEN(state) {
    // 把内存中中的 token 清空
    state.token = ''
    // 清除 cookies 中的 token
    delToken()
    // 清除登录时的时间戳
    removeTimeStamp()
  },

  // 保存用户信息
  SET_USERINFO(state, payload) {
    state.userInfo = payload
  },

  // 清除用户信息
  REMOVE_USEINFO(state) {
    state.userInfo = {}
  }
}

const actions = {
  // 保存 token
  async login(conText, payload) {
    // 请求登录的 token ,得到返回的 token ,保存 token
    const res = await loginApi(payload)
    // console.log(res);
    conText.commit('SET_TOKEN', res.data)
  },
  // 得到用户信息
  async getUserInfo(conText, payload) {
    const res = await getInfoApi()
    // console.log(res);
    const baseRes = await getBaseInfoApi(res.data.userId)
    // console.log(baseRes);
    // 得到员工的基本信息
    conText.commit('SET_USERINFO', {
      ...res.data,
      ...baseRes.data
    })
  },
  // 删除 token
  logout(context) {
    context.commit('REMOVE_TOKEN'),
      // 移除用户信息
      context.commit('REMOVE_USEINFO')
    // router.push("/login");
  }
}

// vuex
export default {
  namespaced: true,
  state,
  mutations,
  actions
}
